# -*- coding: utf-8 -*-
import re


def before_return(images, data):
    """数据返回前会调用该钩子函数进行处理
    使用场景：
    1. 对抽取到的值做某些处理，例如对某些值进行过滤，或者对抽取到的某些值运算等；
    2. 判断抽取到的值是否符合要求，如果符合要求则返回status=1，否则status=0，这样可以用于质检等；
    3. 可以对抽取到的值增加一些变量，或者减少一些变量，增加变量时要主要保持数据结构一致
    :param images list 文档分拆出来的图像列表，特殊情况才需要依赖图像进行计算，例如可以获取每一页的图像大小，总页数等
    :param data list 抽取得到的数据，格式如：
        [
            // 第一个抽取变量
            {
                "variable_name": "变量名",
                "data": [    // 每个抽取变量可能会抽取到多个值
                    {        // 变量对应的第一个抽取到的值
                        "type": "text",   // 值类型，支持有：text/image/table
                        "text": "",       // 当type=text时，该值为抽取到的文本，当type=image时，该值为对应图像的base64字符串
                        "tables": [],     // 当type=table时，抽取到的单元格的详细信息
                        "page": [1],      // 抽取到的值所在的页码，可能会包含多个值
                        "box": [[x1, y1, x2, y2]],  // 抽取到的值所在的box，可能会包含多个box
                        ....
                    },
                    // 更多抽取到的值
                ]
            },
            // 更多抽取变量......
        ]
    :return status int 后处理状态，通常用于标识成功或者失败，该值会存储到数据库的machine_status字段中，该值没有统一的定义，各个文档类型可以自定义解释即可
    :return data list 处理后的抽取数据，注意格式要和输入保持一致
    """
    status = 0
    new_items = []
    for item in data:
        if item['variable_name'] == '开户行及银行账号':
            # 把开户行和银行账号拆分成两个字段
            # 抽取到的值如：中国建设银行佛山红棉支行44001668637050811111
            new_item_data = []
            for val in item['data']:
                new_val = {k: v for k, v in val.items()}
                text = val['text']
                account = re.findall('\d{10,}', text)
                if len(account) == 0:    # 没有找到银行账号
                    continue

                text = re.sub('\d{10,}.*', '', text)
                val['text'] = text.strip(",，.。、 ")
                new_val['text'] = account[-1]
                new_item_data.append(new_val)

            item['variable_name'] = "开户行"
            new_items.append({
                "variable_name": "开户账号",
                "data": new_item_data,
            })

    # 加上新增的字段
    data += new_items

    return status, data


if __name__ == "__main__":
    data = [
            {
                "variable_name": "开户行及银行账号",
                "data": [
                    {
                        "type": "text",
                        "text": "中国建设银行佛山红棉支行44001668637050811111",
                        "tables": [],
                        "page": [1],
                        "box": [[1, 1, 10, 10]],
                    },
                ]
            },
    ]
    _, resp = before_return([], data)
    print(resp)

    data = [
            {
                "variable_name": "开户行及银行账号",
                "data": [
                    {
                        "type": "text",
                        "text": "中国建设银行佛山红棉支行,44001668637050811111",
                        "tables": [],
                        "page": [1],
                        "box": [[1, 1, 10, 10]],
                    },
                ]
            },
    ]
    _, resp = before_return([], data)
    print(resp)

    data = [
            {
                "variable_name": "开户行及银行账号",
                "data": [
                    {
                        "type": "text",
                        "text": "中国建设银行佛山红棉支行，44001668637050811111",
                        "tables": [],
                        "page": [1],
                        "box": [[1, 1, 10, 10]],
                    },
                ]
            },
    ]
    _, resp = before_return([], data)
    print(resp)
